package cn.harry.cabinet.utils

import android.annotation.SuppressLint
import android.content.Context
import android.util.Log

/**
 * 语音播报辅助类
 * 封装常用的语音播报功能
 */
object VoiceHelper {
    
    private const val TAG = "VoiceHelper"
    @SuppressLint("StaticFieldLeak")
    private var ttsManager: TTSManager? = null
    private var isEnabled = true // 是否启用语音播报
    
    /**
     * 初始化语音播报
     */
    fun initialize(context: Context, callback: ((Boolean) -> Unit)? = null) {
        ttsManager = TTSManager.getInstance(context)
        ttsManager?.initialize { success ->
            if (success) {
                Log.i(TAG, "语音播报初始化成功")
            } else {
                Log.e(TAG, "语音播报初始化失败")
            }
            callback?.invoke(success)
        }
    }
    
    /**
     * 启用/禁用语音播报
     */
    fun setEnabled(enabled: Boolean) {
        isEnabled = enabled
        if (!enabled) {
            ttsManager?.stop()
        }
    }
    
    /**
     * 检查是否已启用
     */
    fun isEnabled(): Boolean = isEnabled
    
    /**
     * 播放欢迎语音
     */
    fun speakWelcome(userName: String) {
        if (!isEnabled) return
        speak("欢迎，$userName")
    }
    
    /**
     * 播放取仪器成功语音
     */
    fun speakTakeSuccess(instrumentName: String) {
        if (!isEnabled) return
        speak("取出${instrumentName}成功，请妥善保管")
    }
    
    /**
     * 播放还仪器成功语音
     */
    fun speakReturnSuccess(instrumentName: String) {
        if (!isEnabled) return
        speak("归还${instrumentName}成功，感谢使用")
    }
    
    /**
     * 播放验证失败语音
     */
    fun speakAuthFailed(reason: String = "验证失败") {
        if (!isEnabled) return
        speak(reason)
    }
    
    /**
     * 播放刷卡提示
     */
    fun speakCardPrompt() {
        if (!isEnabled) return
        speak("请刷卡")
    }
    
    /**
     * 播放人脸识别提示
     */
    fun speakFacePrompt() {
        if (!isEnabled) return
        speak("请面向摄像头")
    }
    
    /**
     * 播放密码输入提示
     */
    fun speakPasswordPrompt() {
        if (!isEnabled) return
        speak("请输入密码")
    }
    
    /**
     * 播放选择验证方式提示
     */
    fun speakSelectAuthMethod(actionType: String) {
        if (!isEnabled) return
        speak( "请选择验证方式")
    }
    
    /**
     * 播放操作成功语音
     */
    fun speakSuccess(message: String = "操作成功") {
        if (!isEnabled) return
        speak(message)
    }
    
    /**
     * 播放操作失败语音
     */
    fun speakError(message: String = "操作失败") {
        if (!isEnabled) return
        speak(message)
    }
    
    /**
     * 播放自定义文本
     */
    fun speak(text: String, interrupt: Boolean = true) {
        if (!isEnabled) return
        ttsManager?.speak(text, interrupt = interrupt)
    }
    
    /**
     * 停止播放
     */
    fun stop() {
        ttsManager?.stop()
    }
    
    /**
     * 检查是否正在播放
     */
    fun isSpeaking(): Boolean {
        return ttsManager?.isSpeaking() ?: false
    }
    
    /**
     * 设置语速
     */
    fun setSpeechRate(rate: Float) {
        ttsManager?.setSpeechRate(rate)
    }
    
    /**
     * 释放资源
     */
    fun shutdown() {
        ttsManager?.shutdown()
        ttsManager = null
    }
}
